package org.lhh.server.service.impl;

import org.lhh.server.common.api.JSONResult;
import org.lhh.server.common.utils.CollectionUtils;
import org.lhh.server.core.codec.cluster.ClusterSchemaCodec;
import org.lhh.server.core.repository.EtlRepository;
import org.lhh.server.service.IClusterService;
import org.pentaho.di.cluster.ClusterSchema;
import org.pentaho.di.cluster.SlaveServer;
import org.pentaho.di.repository.ObjectId;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * @author 辉仔
 * @since 2019-12-30
 */
@Service
public class ClusterServiceImpl implements IClusterService {

    @Override
    public void saveClusterSchema(ClusterSchemaCodec clusterSchemaCodec) {
        ClusterSchema clusterSchema = ClusterSchemaCodec.decode(clusterSchemaCodec);
        EtlRepository.saveClusterSchema(clusterSchema);
    }

    @Override
    public void remove(Long id) {
        EtlRepository.delClusterSchema(id);
    }


    @Override
    public JSONResult list() {
        ObjectId[] clusterIDs = EtlRepository.getClusterIDs(false);
        List<SlaveServer> allServers = EtlRepository.getSlaveServers();
        if (!CollectionUtils.isEmpty(clusterIDs)) {
            List<ClusterSchemaCodec> clusterSchemaCodecs = new ArrayList<>();
            for (ObjectId objectId : clusterIDs) {
                ClusterSchema clusterSchema = EtlRepository.loadClusterSchema(objectId, allServers);
                clusterSchemaCodecs.add(ClusterSchemaCodec.encode(clusterSchema));
            }
            return JSONResult.ok(clusterSchemaCodecs);
        }
        return JSONResult.ok(Collections.EMPTY_LIST);
    }
}
